package rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import org.pb.basic.util.ConnectionUtils;

import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.TimeoutException;

/**
 * 生产者类
 * @author pb
 */
public class Producer {

    /**
     * 声明队列的名字，使用常量，保证队列唯一性
     */
    private static final String QUEUE = "simple_producer";

    public static void main(String[] args) {
        // 声明连接对象
        Connection connection = null;
        // 声明连接通道
        Channel channel = null;
        try {
            // 通过工具类获取到连接对象
            connection = ConnectionUtils.getConnection();
            // 通过连接对象获取到连接通道
            channel = connection.createChannel();
            /*
                channel连接通道对象 声明【declare】队列channel.queueDeclare(...)
                param1:队列名
                param2:是否持久化
                param3:队列是否独占此连接
                param4:队列不再使用时是否自动删除此队列
                param5:队列参数
             */
            channel.queueDeclare(QUEUE, true, false, false, null);
            String msg = "hello" + System.currentTimeMillis();
            // 生产者发布消息【通过通道】
            // 方法 publish【发布】 param1 交换机名，如果没有指定，就是默认交换机；param2 routingkey 路由关键字；param3 消息属性，param4 消息体,消息具体内容，一般是一个变量
            channel.basicPublish("", null, null, msg.getBytes());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                    if (channel != null) {
                        try {
                            channel.close();
                        } catch (TimeoutException e) {
                            e.printStackTrace();
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
